package com.hyt.it.ogt.ykcj.service.zs;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.ykcj.domain.zs.ZsExamineeInfo;
import com.hyt.it.ogt.ykcj.domain.zs.ZsTemplate;
import com.hyt.it.ogt.ykcj.domain.zs.ZsTemplateConfig;
import com.hyt.it.ogt.ykcj.domain.zs.vo.ZsExamineeInfoVO;

import java.util.List;

/**
 * 证书考生信息接口
 *
 * @author admin
 * @date 2021-06-18
 */
public interface IZsExamineeInfoService extends IService<ZsExamineeInfo> {

    <E extends IPage<ZsExamineeInfoVO>> E examineePage(E pageParam, String zsId, String idWord, Integer status);

    Boolean issueCertificate(String examineeInfoId) throws IllegalAccessException;

    Boolean issueCertificate(ZsExamineeInfo examineeInfo, ZsTemplate zsTemplate, List<ZsTemplateConfig> zsTemplateConfigs, String updateBy);

    Integer deleteExaminee(String id, String updateBy);

    ZsExamineeInfoVO queryZsExaminee(String zsId, String name, String idCardNo) throws Exception;

    ZsExamineeInfoVO queryZsExamineeByExamId(String examId, String admissonNo, String idCardNo) throws Exception;

    ZsExamineeInfoVO queryZsExamineeById(String id, String zsId) throws Exception;

    List<ZsExamineeInfo> releasableExamineesInfo(String infoId);

    List<ZsExamineeInfo> allExamineesInfo(String infoId);

    Integer countSerialNumberIsNull(String infoId);

    List<ZsExamineeInfo> listByIdNo(String idNo, String infoId);

    /**
     * 证书下是否存在编号的考生
     *
     * @param zsId                    证书id
     * @param id                      考生id
     * @param certificateSerialNumber
     * @return
     */
    Boolean exitCertificateSerialNumber(String zsId, String id, String certificateSerialNumber);

    /**
     * 证书下是否相同证件的考生
     *
     * @param zsId               证书id
     * @param id                 考生id
     * @param identificationType 证件类型
     * @param identificationNo   证件号码
     * @return
     */
    Boolean exitIdentificationNo(String zsId, String id, String identificationType, String identificationNo);

    /***
     * 修改考生证书信息
     * @param zsExamineeInfoVO
     * @return
     */
    Boolean editZsExamineeInfo(ZsExamineeInfoVO zsExamineeInfoVO);

    /***
     * 校验考生证书是不是已经发放
     * @param zsId  证书id
     * @param id  证书考生id
     * @return
     */
    Boolean checkCertificateProvideStatus(String zsId, String id, Integer provideStatus);

    /**
     * 统计证书的应发已发人数
     *
     * @param zsId
     * @param provideStatus
     * @return
     */
    Integer countPublishNumByZsId(String zsId, Integer provideStatus);

    /**
     * 取消发放证书
     *
     * @param examineesInfoId
     * @return
     */
    Boolean recallCertificate(String examineesInfoId);

    /**
     * 根据证书id获取最新的考生信息
     *
     * @param infoId
     * @return
     */
    ZsExamineeInfo getLastOneStudentByZsId(String infoId);

    /**
     * 查询考生可以查看的证书通过考试ID
     *
     * @param zsExamineeIds
     * @return
     */
    List<ZsExamineeInfo> listByCanViewByIds(List<String> zsExamineeIds);

    /**
     * 获取模板列表渲染配置
     *
     * @param zsId
     * @return
     */
    List<ZsTemplateConfig> showViewHead(String zsId);
}
